/* ============================================================================
* 功能描述 ：按键函数实现
* 作者       ：ggls
* 创建日期 ：2024.5.22
* ----------------------------------------------------------------------------
* 更新历史 ：
*	日期 　　- 修改者   : 更新内容描述
*
* ============================================================================
*/


#include "main.h"


bit key_sleep = 1;


u8 time = 0, mode = 0; // 系统变量

u8 key = 0; // 键值



u8 key_dat = 0; // 按键值，防锁定

u8 key_num = 0;

u32 key_time = 0; // 按键计时
u32 now_key_time = 0; // 按键计时

char key_flag;

char key_flag2;

char key_state = 0;

bit time_f;
u32 now_time_f;
u32 last_time_f;

bit unit_flag = 0;


void Hly_Key_Init(void)
{
	/* 设置io功能 */
	GPIO_SET_MUX_MODE(P30CFG, GPIO_MUX_GPIO);		//设置P30为GPIO模式
	GPIO_ENABLE_INPUT(P3TRIS, GPIO_PIN_0);			//设置为输入模式
	GPIO_ENABLE_UP(P3UP, GPIO_PIN_0);				//开启下拉
	


	/* 设置中断方式 */
	GPIO_SET_INT_MODE(P30CFG, GPIO_INT_FALLING);	//设置为下降沿中断模式
	GPIO_EnableInt(GPIO3, GPIO_PIN_0_MSK);			//开启P30中断

//	P30 = 1;
	/*
	(3)设置中断优先级
	*/
	IRQ_SET_PRIORITY(IRQ_P3, IRQ_PRIORITY_LOW);
	/*
	(4)开启总中断
	*/	
	IRQ_ALL_ENABLE();

	
}



void key_scan(void) 
{
#if 0
  
    

#else
	if(P17 == 0)
	{
		delayms(10);  // 防抖


		if(P17 == 0)
		{
		
			key_sleep = 0;
			if(key_flag == 0)
			{
				last_time_f = get_current_s();
				time_f = 1;
			}
			now_time_f = get_current_s();
			if(abs(now_time_f - last_time_f) >= 4 && time_f == 1) // 长按五秒判定
			{
				Zigbee_wake_up();
				delayms(25);
				Zigbee_Network_Status();
								
				Zigbee_sleep();
			//	_data3_tx_pack();
				time_f = 0;

			}
			key_flag = 1;
			if(key_state == 1)
				key_flag2 = 1;
		}
		
	}
	else
	{
	//	delayms(10);        
		if(P17 == 1 && key_flag == 1 )   //检测弹起
		{
		#if 0
			signed short t, h;
			char t1[5],h1[3],niubi;
			_data_tx_pack();             //弹起后处理任务
			niubi = SHT4XReadTemperatureAndHumidity(&t, &h);
			if(niubi == 1)
			{
				t1[0] = SHORT_GET_HIGH_BYTE(t);
				t1[1] = SHORT_GET_LOW_BYTE(t);
				
				t1[2] = SHORT_GET_HIGH_BYTE(h);
				t1[3] = SHORT_GET_LOW_BYTE(h);
				Uart_Tx_buf(t1, 4);
			}
			Hly_Temp_Hum_Obtain();
	//	Seg_Set_Data();
		#else	
			
		
		#endif	
		delayms(10);
		if(key_state == 0)
		{
			

			key_time = get_current_ms();
			key_state = 1;	
		}
		now_key_time =get_current_ms();
		if(time_f == 1)
		{
			if(abs(now_key_time - key_time) < DOUBLE_CLICK_THRESHOLD)
			{
				if(key_flag2 == 1)
				{
					
					unit_flag = ~unit_flag;

					Zigbee_wake_up();
					delayms(25);
					Hly_tuya_updata(temp_unit_convert, unit_flag, 1, DP_TYPE_ENUM);
					Zigbee_sleep();
					key_state = 0;
					key_flag2 = 0;
					key_flag = 0;
					_app_temp_unit();
				}
			}
			if(abs(now_key_time - key_time) >= DOUBLE_CLICK_THRESHOLD)
			{
				Zigbee_wake_up();
				delayms(25);
				Hly_button_Event();	
				Zigbee_sleep();
				key_flag = 0;
				key_state = 0;

			}
		}
			if(time_f == 0)
			{
				key_flag = 0;
				key_state = 0;
				Zigbee_sleep();

			}
		}			
	}
#endif

}



